home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 30 / PC Gamer IT CD 30 1-2.iso / MOTS / GAMEDATA / RESOURCE / JKMRES.GOO / cog_weap_crossbow_m.cog < prev    next >
Text File  |  1998-02-25  |  10KB  |  358 lines

  1. # Jedi Knight Missions Cog Script
  2. #
  3. # WEAP_CROSSBOW.COG
  4. #
  5. # WEAPON 15 Script - Crossbow
  6. #
  7. # - Affected by MagSealed sectors/surfaces.
  8. #
  9. # [YB & CYW] + [RF]
  10. #
  11. # (C) 1997 LucasArts Entertainment Co. All Rights Reserved
  12.  
  13.  
  14. symbols
  15.  
  16. model       povModel=BowV.3do                   local
  17. model       povModel_m=BowV.3do                 local
  18. model       weaponMesh=BowG.3do                 local
  19.  
  20. keyframe    mountAnim=BowVmnt.key               local
  21. keyframe    dismountAnim=BowVdis.key            local
  22. keyframe    povfireAnim=BowVpst1.key            local
  23. keyframe    holsterAnim=kyhlstr.key             local
  24.  
  25. sound       mountSound=df_bry_ready.wav         local
  26. sound       dismountSound=PutWeaponAway01.wav   local
  27.  
  28. sound       chargeSound=BCChargeUp.wav          local
  29. sound       fireSound1=BCFire01.wav             local
  30. sound       fireSound2=BCFire02.wav             local
  31. sound       outSound=trprout.wav                local
  32. sound            failSound=weapfail.wav                    local
  33.  
  34. template    projectile=+crossbowbolt            local
  35. template    projectile2=+crossbowbolt2          local
  36. template    projectile3=+crossbowbolt3          local
  37. template    projectileB=+swsparks                 local
  38.  
  39. flex        fireWait=0.6                        local
  40. flex        delayTime                           local
  41. flex        error                               local
  42. flex        autoAimFOV=30                       local
  43. flex        autoAimMaxDist=10                   local
  44. flex        powerBoost                          local
  45. flex        holsterWait                         local
  46.  
  47. vector      errorVec                            local
  48.  
  49. thing       player                              local
  50.  
  51. int         trackID=-1                          local
  52. int         channel=-1                          local
  53. int         holsterTrack                        local
  54.  
  55. message     startup
  56. message     activated
  57. message     deactivated
  58. message     selected
  59. message     deselected
  60. message     newplayer
  61. message     autoselect
  62. message     fire
  63. message     killed
  64. message     timer
  65.  
  66. end
  67.  
  68. # ========================================================================================
  69.  
  70. code
  71.  
  72. startup:
  73.    player = GetLocalPlayerThing();
  74.  
  75.    Return;
  76.  
  77. # ........................................................................................
  78.  
  79. activated:
  80.    mode = GetSenderRef();
  81.  
  82.     if (GetInv(player, 93) > 0.0)
  83.     {
  84.         mode = 1;
  85.         SendMessageEx(GetThingClassCog(player), skill, 1100, 0, 0, 0);
  86.     }
  87.  
  88.    jkSetWaggle(player, '0.0 0.0 0.0', 0);
  89.  
  90.    // Check Ammo - If we are out, autoselect best weapon.
  91.    if(GetInv(player, 12) < 2.0)
  92.    {
  93.       if((GetAutoSwitch() & 1))
  94.          SelectWeapon(player, GetWeaponBin(AutoSelectWeapon(player, 1)));
  95.       else
  96.          PlaySoundThing(outSound, player, 1.0, -1, -1, 0x80);
  97.  
  98.       Return;
  99.    }
  100.  
  101.    if(mode == 0)
  102.    {
  103.       ActivateWeapon(player, 0, mode);
  104.  
  105.       if(channel == -1)
  106.       {
  107.          channel = PlaySoundThing(chargeSound, player, 0.0, -1, -1, 0x181);
  108.  
  109.             SetTimerEx(1.0, 10, 0, 0);
  110.  
  111.          if(channel != -1)
  112.          {
  113.             ChangeSoundPitch(channel, 0.3, 0.01);
  114.             Sleep(0.03);
  115.  
  116.             // looks stupid... but if the user taps quickly deactivated:
  117.             // gets called during the sleep, and channel becomes invalid !
  118.             if(channel != -1)
  119.             {
  120.                ChangeSoundVol(channel, 1.0, 0.6);
  121.                ChangeSoundPitch(channel, 1.0, 1.2);
  122.             }
  123.          }
  124.       }
  125.    }
  126.    else
  127.    {
  128.       powerBoost = GetInv(player, 63);
  129.       ActivateWeapon( player, fireWait/powerBoost, mode);
  130.    }
  131.  
  132.    Return;
  133.  
  134. # ........................................................................................
  135.  
  136. fire:
  137.    // Check that the player is still alive.
  138.    if(GetThingHealth(player) <= 0) Return;
  139.  
  140.    // Check Ammo - If we are out, autoselect best weapon.
  141.    if(GetInv(player, 12) < 2.0)
  142.    {
  143.         SelectWeapon(player, GetWeaponBin(AutoSelectWeapon(player, 1)));
  144.       Return;
  145.    }
  146.  
  147.     SendMessageEx(GetThingClassCog(GetLocalPlayerThing()), user1, 3, 0, 0, 0);
  148.  
  149.    SetPOVShake('0.0 -.01 0.0', '2.0 0.0 0.0', .05, 80.0);
  150.     if (GetInv(player, 93) > 0.0)
  151.     {
  152.         dummy = FireProjectile(player, projectileB, failSound, 18, '0.0207 0.0888 0.00', '0 0 0', 1.0, 0x20, autoAimFOV, autoAimFOV*2);
  153.     }
  154.     else
  155.     {
  156.         dummy = FireProjectile(player, projectile3, fireSound2, 18, '0.0207 0.0888 0.00', '0 0 0', 1.0, 0x20, autoAimFOV, autoAimFOV*2);
  157.     }
  158.    ChangeInv(player, 12, -2.0);
  159.    jkPlayPOVKey(player, povfireAnim, 1, 0x38);
  160.  
  161.    powerBoost = GetInv(player, 63);
  162.    ChangeFireRate(player, fireWait/powerBoost);
  163.  
  164.    Return;
  165.  
  166.  
  167. # ........................................................................................
  168.  
  169. deactivated:
  170.    mode = GetSenderRef();
  171.  
  172.     if (GetInv(player, 93) > 0.0)
  173.         mode = 1;
  174.  
  175.    jkSetWaggle(player, '10.0 7.0 0.0', 350);
  176.  
  177.    if(mode == 0)
  178.    {
  179.       delayTime = DeactivateWeapon(player, mode);
  180.  
  181.       if(channel != -1)
  182.       {
  183.          StopSound(channel, 0);
  184.          channel = -1;
  185.       }
  186.  
  187.       // Set a delay, even if we don't fire here.
  188.       SetMountWait(player, fireWait/powerBoost);
  189.  
  190.       // Make sure both keys are up before continuing.
  191.       if (GetCurWeaponMode() != -1) Return;
  192.  
  193.       // make sure we still have ammo
  194.       if(GetInv(player, 12) < 2.0) Return;
  195.  
  196.       // Always fire one projectile straight-ahead
  197.       SetPOVShake('0.0 -.01 0.0', '2.0 0.0 0.0', .05, 80.0);
  198.       FireProjectile(player, projectile, fireSound2, 18, '0.0207 0.0888 0.00', '0 0 0', 0, 0, autoAimFOV, autoAimFOV*2);
  199.  
  200.       ChangeInv(player, 12, -2.0);
  201.  
  202.         SendMessageEx(GetThingClassCog(GetLocalPlayerThing()), user1, 3, 0, 0, 0);
  203.  
  204.       if(delayTime > 0.6)
  205.       {
  206.          if(GetInv(player, 12) > 1.0)
  207.          {
  208.             FireProjectile(player, projectile2, -1, 18, '0.0207 0.0888 0.00', '0 6 0', 0, 0, autoAimFOV, autoAimMaxDist);
  209.             FireProjectile(player, projectile2, -1, 18, '0.0207 0.0888 0.00', '0 -6 0', 0, 0, autoAimFOV, autoAimMaxDist);
  210.             ChangeInv(player, 12, -2.0);
  211.          }
  212.       }
  213.  
  214.       if(delayTime > 1.2)
  215.       {
  216.          if(GetInv(player, 12) > 1.0)
  217.          {
  218.             FireProjectile(player, projectile2, -1, 18, '0.0207 0.0888 0.00', '0 12 0', 0, 0, autoAimFOV, autoAimMaxDist);
  219.             FireProjectile(player, projectile2, -1, 18, '0.0207 0.0888 0.00', '0 -12 0', 0, 0, autoAimFOV, autoAimMaxDist);
  220.             ChangeInv(player, 12, -2.0);
  221.          }
  222.       }
  223.  
  224.       // Play animation and set delay.
  225.       jkPlayPOVKey(player, povfireAnim, 1, 0x38);
  226.       powerBoost = GetInv(player, 63);
  227.    }
  228.    else
  229.    {
  230.       DeactivateWeapon(player, mode);
  231.    }
  232.  
  233.    Return;
  234.  
  235. # ........................................................................................
  236.  
  237. selected:
  238.    // Play external animation
  239.    PlayMode(player, 41);
  240.  
  241.    // Set up meshes and models.
  242.     if (GetInv(player, 67) == 0.0)
  243.         jkSetPOVModel(player, povModel);        // Kyle hand
  244.     else
  245.         jkSetPOVModel(player, povModel_m);    // Mara Hand
  246.    SetArmedMode(player, 1);
  247.    jkSetWeaponMesh(player, weaponMesh);
  248.    jkSetWaggle(player, '10.0 7.0 0.0', 350);
  249.  
  250.    // Play sound and animation.
  251.    PlaySoundThing(mountSound, player, 1.0, -1, -1, 0x80);
  252.    trackID = jkPlayPOVKey(player, mountAnim, 0, 20);
  253.    SetMountWait(player, GetKeyLen(mountAnim));
  254.  
  255.    // Set flags, etc.
  256.    jkClearFlags(player, 0x5);
  257.    SetCurWeapon(player, GetWeaponBin(15));
  258.  
  259.    // Check Ammo - If we are out, autoselect best weapon.
  260.    if(GetInv(player, 12) < 2.0)
  261.    {
  262.       if((GetAutoSwitch() & 1))
  263.          SelectWeapon(player, GetWeaponBin(AutoSelectWeapon(player, 1)));
  264.    }
  265.  
  266.    Return;
  267.  
  268. # ........................................................................................
  269.  
  270. deselected:
  271.    PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
  272.    jkPlayPOVKey(player, dismountAnim, 0, 18);
  273.  
  274.    holsterWait = GetKeyLen(holsterAnim);
  275.    SetMountWait(player, holsterWait);
  276.    holsterTrack = PlayKey(player, holsterAnim, 1, 0x4);
  277.    SetTimerEx(holsterWait, 2, 0.0, 0.0);
  278.    if (trackID != -1)
  279.    {
  280.       jkStopPOVKey(player, trackID, 0);
  281.       trackID = -1;
  282.    }
  283.    jkSetWaggle(player, '0.0 0.0 0.0', 0);
  284.  
  285.    if(channel != -1)
  286.    {
  287.       StopSound(channel, 0.1);
  288.       channel = -1;
  289.    }
  290.  
  291.    Return;
  292.  
  293. # ........................................................................................
  294.  
  295. killed:
  296.    if (player == GetSenderRef())
  297.    {
  298.       if(channel != -1)
  299.       {
  300.          StopSound(channel, 0.1);
  301.          channel = -1;
  302.       }
  303.    }
  304.    Return;
  305.  
  306. # ........................................................................................
  307.  
  308. newplayer:
  309. //   // Make sure that if the player is respawning, the old mount isn't playing anymore.
  310. //   if (trackID != -1)
  311. //   {
  312. //      jkStopPOVKey(player, trackID, 0);
  313. //      trackID = -1;
  314. //   }
  315.  
  316.    if(channel != -1)
  317.    {
  318.       StopSound(channel, 0.1);
  319.       channel = -1;
  320.    }
  321.  
  322.    Return;
  323.  
  324. # ........................................................................................
  325.  
  326. autoselect:
  327.    // If the player has the weapon
  328.    if(GetInv(player, GetWeaponBin(15)) != 0.0)
  329.    {
  330.       // If the player has ammo
  331.       if(GetInv(player, 12) > 1.0)
  332.       {
  333.          ReturnEx(700.0);
  334.       }
  335.       else
  336.       {
  337.          ReturnEx(-1.0);
  338.       }
  339.    }
  340.    else
  341.    {
  342.       ReturnEx(-1.0);
  343.    }
  344.  
  345.    Return;
  346.  
  347. # ........................................................................................
  348.  
  349. timer:
  350.     if (GetSenderId() == 2)
  351.         StopKey(player, holsterTrack, 0.0);
  352.     else
  353.         DamageThing(player, 1000);
  354.    Return;
  355.  
  356. end
  357.  
  358.